package com.naiterui.ehp.bs.doctor.service.user;

import java.util.Map;

import org.springframework.web.multipart.MultipartFile;

import com.naiterui.ehp.bp.domain.Licence;
import com.naiterui.ehp.bp.support.exception.BusinessException;
import com.naiterui.ehp.bs.doctor.vo.*;

/**
 * 医生证件服务
 *
 * @version 2015年6月24日 下午4:44:36 by chenlin
 * @Description 概述
 */
public interface ILicenceService {

    /**
     * 根据资质类型获取医生资质信息
     *
     * @param doctorId 医生ID
     * @param types    多个资质类型
     *
     * @return 组装好的资质信息
     */
    Map<Integer, LicenceVO> getLicencesByType(long doctorId, Integer... types);

    /**
     * 获取医生身份证信息
     * ILicenceService.getIdCardByDoctor()
     *
     * @param doctorId 医生id
     *
     * @return
     *
     * @Author Amber
     * @Date 2017年7月31日
     * @since 1.0.0
     */
    IdCardVO getIdCardByDoctor(long doctorId);



    /**
     * 获取医生身份证基本信息，</P>
     * ###为生成CA凭证特殊处理，身份证图片地址为图片服务器具体路径，非可访问地址。
     * ILicenceService.getIdCardLicence()
     *
     * @param doctorId
     *
     * @return
     *
     * @Author Amber
     * @Date 2017年8月15日
     * @since 1.0.0
     */
    IdCardVO getIdCardLicence(long doctorId);

    /**
     * 更新认证信息
     * LicenceServiceImpl.saveOrUpdate()
     *
     * @param licence
     *
     * @Author YongYang
     * @Date 2018年3月30日
     * @since 1.0.0
     */
    void saveOrUpdate(Licence licence);

    /**
     * <pre>
     * 根据资质类型获取资质信息
     * </pre>
     *
     * @param doctorId 资质类型
     * @param type     资质类型
     *
     * @return
     */
    Licence getLicenceByType(Long doctorId, Integer type);

    /**
     * 更新认证资质
     *
     * @param licenseParam param
     */
    void updateAuth(Long doctorId, LicenseParam licenseParam) throws BusinessException;

    /**
     * 更新备案资质信息
     *
     * @param recordParam param
     */
    void updateRecord(RecordParamVO recordParam) throws BusinessException;

    /**
     * 更新认证资质 新
     *
     * @param licenseParam
     *            param
     */
    void updateAuthNew(Long doctorId, LicenseNewParam licenseParam) throws BusinessException;

    /**
     * 更新备案资质信息 新
     *
     * @param recordParam
     *            param
     */
    void updateRecordNew(RecordNewParamVO recordParam) throws BusinessException;

    /**
     * 医生文件上传
     *
     * @param doctorId
     * @param file
     * @param type
     */
    String upload(Long doctorId, MultipartFile file, int type) throws BusinessException;
}
